package day2;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import utility.JdbcUtils;


public class OtherApi {
	public static void main(String[] args) throws SQLException,
			InterruptedException {
		// int id = create();
		// System.out.println("id:" + id);
		//create();
		read();
	}
	
	private static void create() throws SQLException{
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 2.建立连接
			con = JdbcUtils.getConnection();
			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			String sql = "insert into user(name,birthday, money) values ('name2 gk', '1987-01-01', 400) ";
			ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
			ps.executeUpdate();
			rs=ps.getGeneratedKeys();
			while(rs.next()){
				System.out.println(rs.getInt(1));
			}
		}finally{
			JdbcUtils.free(rs, ps, con);
			
		}
			
	}
		
	private static void read() throws SQLException, InterruptedException{
		Connection con = null;
		Statement ps = null;
		ResultSet rs = null;
		try {
			// 2.建立连接
			con = JdbcUtils.getConnection();
			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			String sql = "select id, name, money, birthday  from user where id < 5";
			
			/*结果集类型可以指定三种设置：
			ResultSet.TYPE_FORWARD_ONLY(默认)
			ResultSet.TYPE_SCROLL_INSENSITIVE
			ResultSet.TYPE_SCROLL_SENSITIVE
			指定为TYPE_FORWARD_ONLY，ResultSet就只能前进数据光标，指定为TYPE_SCROLL_ INSENSITIVE或TYPE_SCROLL_SENSITIVE，则ResultSet可以前后移动数据光标。
			两者差别在于TYPE_SCROLL_INSENSITIVE设置下，取得的ResultSet不会反应数据库中的数据修改，而TYPE_SCROLL_SENSITIVE会反应数据库中的数据修改。
			更新设置可以有两种指定：
			ResultSet.CONCUR_READ_ONLY(默认)
			ResultSet.CONCUR_UPDATABLE
			指定为CONCUR_READ_ONLY，则只能用ResultSet进行数据读取，无法进行更新。指定为CONCUR_UPDATABLE，就可以使用ResultSet进行数据更新。
			*/
			ps=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			
			rs=ps.executeQuery(sql);
			// 5.处理结果
			for(int j=1;j<=3;j++){
				rs.absolute(j);
				int id = rs.getInt("id");
				System.out.println("show " + id + "...");
				Thread.sleep(100);
				System.out.println(id + "\t" + rs.getObject("name") + "\t"
						+ rs.getObject("birthday") + "\t"
						+ rs.getObject("money"));
				rs.updateFloat("money", 1200f);
				rs.updateRow();
			}
				
			
		}finally{
			JdbcUtils.free(rs, ps, con);
			
		}
	}
}
